package com.huiqiao.lesson7.simple;


import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;


// 标记成切面类
// 需要交给Spring管理
@Aspect
@Component
public class MethodExecuteTimeAspect {

    // 切面表达式
    @Around("execution(* com.huiqiao.lesson7.simple.UserDao.*(..))")
    public Object timeRecord(ProceedingJoinPoint joinPoint) throws Throwable {
        // 方法执行前时间
        long startTime = System.currentTimeMillis();

        // 执行具体方法
        Object obj = joinPoint.proceed();

        // 方法执行后时间
        long endTime = System.currentTimeMillis();

        // 获取方法名
        String methodName = joinPoint.getSignature().getName();
        // 获得类型
        String className = joinPoint.getTarget().getClass().getName();

        System.out.println("类：" + className + " ==> 执行" + methodName +  " 方法执行耗时：" + (endTime - startTime) + " ms");

        return obj;
    }
}
